package com.employment.dao;

import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.employment.entity.ChatConversation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 聊天会话Mapper接口
 * 
 * @author Employment System
 * @since 1.0.0
 */
@Mapper
public interface ChatConversationMapper extends BaseMapper<ChatConversation> {

    /**
     * 分页查询用户参与的会话列表
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @return 会话分页列表
     */
    Page<ChatConversation> selectUserConversationPage(Page<ChatConversation> page,
                                                      @Param("userId") Long userId);

    /**
     * 查询用户参与的会话列表
     *
     * @param userId 用户ID
     * @return 会话列表
     */
    List<ChatConversation> selectByUserId(@Param("userId") Long userId);

    /**
     * 查询两个用户之间的私聊会话
     *
     * @param userId1 用户1
     * @param userId2 用户2
     * @return 会话信息
     */
    ChatConversation selectPrivateConversation(@Param("userId1") Long userId1,
                                              @Param("userId2") Long userId2);

    /**
     * 更新会话最后消息信息
     *
     * @param conversationId   会话ID
     * @param lastMessageId    最后消息ID
     * @param lastMessageTime  最后消息时间
     * @return 更新结果
     */
    int updateLastMessage(@Param("conversationId") Long conversationId,
                         @Param("lastMessageId") Long lastMessageId,
                         @Param("lastMessageTime") String lastMessageTime);

    /**
     * 增加会话消息数量
     *
     * @param conversationId 会话ID
     * @return 更新结果
     */
    int increaseMessageCount(@Param("conversationId") Long conversationId);

    /**
     * 查询用户未读会话数量
     *
     * @param userId 用户ID
     * @return 未读会话数量
     */
    Integer countUnreadConversations(@Param("userId") Long userId);
}